package br.unp.tasi.loja.repositorios.impl;

import br.unp.tasi.loja.entidades.Usuario;
import br.unp.tasi.loja.repositorios.RepositorioUsuario;

import java.util.List;

import javax.inject.Named;
import javax.persistence.NoResultException;
import javax.persistence.NonUniqueResultException;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

@Named("br.unp.tasi.loja.repositorios.RepositorioUsuario")
public class RepositorioUsuarioImpl extends RepositorioBasicolmpl implements RepositorioUsuario {

  @Override
  public List<Usuario> localizarTodos() {
    return getEntityManager().createQuery("from Usuario p "
            + "order by p.emoferta DESC, p.categoria.nome, p.nome").getResultList();
  }

  @Override
  public Usuario localizarPeloID(Long id) {
    return getEntityManager().find(Usuario.class, id);
  }

  @Transactional(readOnly = false, propagation = Propagation.REQUIRED)
  @Override
  public void apagarPeloID(Long id) {
    super.apagar(localizarPeloID(id));
  }

  @Override
  public Usuario localizarPeloLoginSenha(String login, String senha) {
    Usuario u = null;
    try {
      u = (Usuario) getEntityManager().createQuery("from Usuario u where u.login = :login and u.senha = :senha").setParameter("login", login).setParameter("senha", senha).getSingleResult();
    } catch (NoResultException e) {
      /* Nenhum resultado retornado */
    } catch (NonUniqueResultException e) {
      /* Mais de um resultado retornado */
    } catch (IllegalStateException e) {
      /* JPQL invalido */
    }
    return u;
  }
}
